🌍 i18n (JA/VI/ZH-TW) + Romanization + AI Overhaul + Performance + Lint Fixes#2457
🌍 i18n (JA/VI/ZH-TW) + Romanization + AI Overhaul + Performance + Lint Fixes#2457daedaevibin wants to merge 65 commits into
Conversation
New values-ja/ resource directory with all string categories translated.
… Vietnamese - isThai(): detect Thai script via U+0E00..U+0E7F - isArabic(): detect Arabic script via U+0600..U+06FF - isGreek(): detect Greek script via U+0370..U+03FF - isHebrew(): detect Hebrew script via U+0590..U+05FF - isVietnamese(): detect Vietnamese via Latin Extended Additional block (U+1EA0..U+1EF9) and specific chars (ă, đ, ơ, ư) - romanizeVietnamese(): NFKD-decompose and strip diacritics to plain ASCII
LyricsRepositoryImpl.kt: - Route Cyrillic text to romanizeCyrillic() before falling through - Route Vietnamese text to romanizeVietnamese() - Include synced lyrics translations in LRC output AiStateHolder.kt: - Detect source language before AI translation using MultiLangRomanizer - Support all newly detected scripts (Thai, Arabic, Greek, Hebrew, Vietnamese) - Prefix translation prompt with detected language for better AI results
MissingDefaultResource (14): Create base values/plurals.xml with English defaults for all 14 plural names that only existed in values-ar/ NewApi (3): Annotate BlurEffectCache with @RequiresApi(31); guard ForegroundServiceStartNotAllowedException with SDK_INT >= S check WrongConstant (1): Suppress lint on takePersistableUriPermission flags NonObservableLocale (2): Suppress lint on Locale.getDefault() in composables MissingIntentFilterForMediaSearch (1): Add MEDIA_PLAY_FROM_SEARCH intent-filter to MainActivity for Android Auto voice search support
- Add JAPANESE, TRADITIONAL_CHINESE, VIETNAMESE to AppLanguage enum - Update locales_config.xml with all supported locales (de, en, es, fr, in, it, ja, ko, nb, ru, tr, vi, zh-CN, zh-TW) - Add German translations for changelogs and settings - Add Korean, Norwegian Bokmal, Russian translations for changelogs and settings - Add Japanese strings_settings.xml update
SettingsCategory.kt: - Add LYRICS category with QueueMusic icon between APPEARANCE and PLAYBACK - Move EQUALIZER after PLAYBACK for better grouping - Add DEVICE_CAPABILITIES after DEVELOPER SettingsCategoryScreen.kt: - Extract lyrics management (source priority, reset) into dedicated LYRICS section - Extract lyrics display (immersive mode, auto-hide delay) into LYRICS section - Keep PLAYBACK focused on playback-specific settings only - Suppress NonObservableLocale in AI usage section SettingsScreen.kt: - Add color scheme for LYRICS category FullPlayerContent.kt: - Remove redundant resetLyricsSearchState() call when opening lyrics sheet
- Add --no-build-cache to all Gradle build steps for CI reproducibility - Reorder CodeQL workflow steps: pin Kotlin version before Gradle setup - Remove explicit maxHeapSize from app build.gradle.kts - Remove kotlin and ksp version overrides from libs.versions.toml
AiPreferencesRepository.kt: Increase default AI max tokens from 4096 to 8192 LyricsStateHolder.kt: Fix lyrics loading priority - read local file and embedded lyrics before falling back to stored database lyrics
…lint baseline - ServerUrlUtils.kt: URL utility for server configuration - values-vi/ and values-zh-rTW/: Vietnamese and Traditional Chinese translation resources - app/lint.xml: Lint baseline configuration file
Bumps the github-actions group with 2 updates: [actions/checkout](https://github.com/actions/checkout) and [actions/cache](https://github.com/actions/cache). Updates `actions/checkout` from 6 to 7 - [Release notes](https://github.com/actions/checkout/releases) - [Changelog](https://github.com/actions/checkout/blob/main/CHANGELOG.md) - [Commits](actions/checkout@v6...v7) Updates `actions/cache` from 5 to 6 - [Release notes](https://github.com/actions/cache/releases) - [Changelog](https://github.com/actions/cache/blob/main/RELEASES.md) - [Commits](actions/cache@v5...v6) --- updated-dependencies: - dependency-name: actions/checkout dependency-version: '7' dependency-type: direct:production update-type: version-update:semver-major dependency-group: github-actions - dependency-name: actions/cache dependency-version: '6' dependency-type: direct:production update-type: version-update:semver-major dependency-group: github-actions ... Signed-off-by: dependabot[bot] <support@github.com>
Bumps the gradle-dependencies group with 2 updates: [gradle-wrapper](https://github.com/gradle/gradle) and [com.google.genai:google-genai](https://github.com/googleapis/java-genai). Updates `gradle-wrapper` from 9.5.1 to 9.6.0 - [Release notes](https://github.com/gradle/gradle/releases) - [Commits](gradle/gradle@v9.5.1...v9.6.0) Updates `com.google.genai:google-genai` from 1.58.0 to 1.60.0 - [Release notes](https://github.com/googleapis/java-genai/releases) - [Changelog](https://github.com/googleapis/java-genai/blob/main/CHANGELOG.md) - [Commits](googleapis/java-genai@v1.58.0...v1.60.0) --- updated-dependencies: - dependency-name: gradle-wrapper dependency-version: 9.6.0 dependency-type: direct:production update-type: version-update:semver-minor dependency-group: gradle-dependencies - dependency-name: com.google.genai:google-genai dependency-version: 1.60.0 dependency-type: direct:production update-type: version-update:semver-minor dependency-group: gradle-dependencies ... Signed-off-by: dependabot[bot] <support@github.com>
…/github-actions-02325a8da5 chore(deps): bump the github-actions group with 2 updates
…dependencies-4659e02046 chore(deps): bump the gradle-dependencies group with 2 updates
|
Drafted AI Errors arise after extended periods of time? Results: Incapable of doing repair work at this time due to many at-home items occuring, including my Aunt's new baby! Since I will be assisting with this child as she is a single mother, I have to relay my time to items of immediate concern, this includes my own physical health and similar items. You may leave comments and or reviews on problematic items for me to see, I will review and correct any where possible as soon as I am available. |
…th 7 updates Bumps the gradle-dependencies group with 7 updates in the / directory: | Package | From | To | | --- | --- | --- | | [gradle-wrapper](https://github.com/gradle/gradle) | `9.6.0` | `9.6.1` | | [com.google.dagger:hilt-android](https://github.com/google/dagger) | `2.59.2` | `2.60` | | [com.google.dagger:hilt-android-compiler](https://github.com/google/dagger) | `2.59.2` | `2.60` | | [io.ktor:ktor-server-core-jvm](https://github.com/ktorio/ktor) | `3.5.0` | `3.5.1` | | [io.ktor:ktor-server-netty-jvm](https://github.com/ktorio/ktor) | `3.5.0` | `3.5.1` | | [io.ktor:ktor-server-cio-jvm](https://github.com/ktorio/ktor) | `3.5.0` | `3.5.1` | | [com.google.dagger.hilt.android](https://github.com/google/dagger) | `2.59.2` | `2.60` | Updates `gradle-wrapper` from 9.6.0 to 9.6.1 - [Release notes](https://github.com/gradle/gradle/releases) - [Commits](gradle/gradle@v9.6.0...v9.6.1) Updates `com.google.dagger:hilt-android` from 2.59.2 to 2.60 - [Release notes](https://github.com/google/dagger/releases) - [Changelog](https://github.com/google/dagger/blob/master/CHANGELOG.md) - [Commits](google/dagger@dagger-2.59.2...dagger-2.60) Updates `com.google.dagger:hilt-android-compiler` from 2.59.2 to 2.60 - [Release notes](https://github.com/google/dagger/releases) - [Changelog](https://github.com/google/dagger/blob/master/CHANGELOG.md) - [Commits](google/dagger@dagger-2.59.2...dagger-2.60) Updates `com.google.dagger:hilt-android-compiler` from 2.59.2 to 2.60 - [Release notes](https://github.com/google/dagger/releases) - [Changelog](https://github.com/google/dagger/blob/master/CHANGELOG.md) - [Commits](google/dagger@dagger-2.59.2...dagger-2.60) Updates `io.ktor:ktor-server-core-jvm` from 3.5.0 to 3.5.1 - [Release notes](https://github.com/ktorio/ktor/releases) - [Changelog](https://github.com/ktorio/ktor/blob/main/CHANGELOG.md) - [Commits](ktorio/ktor@3.5.0...3.5.1) Updates `io.ktor:ktor-server-netty-jvm` from 3.5.0 to 3.5.1 - [Release notes](https://github.com/ktorio/ktor/releases) - [Changelog](https://github.com/ktorio/ktor/blob/main/CHANGELOG.md) - [Commits](ktorio/ktor@3.5.0...3.5.1) Updates `io.ktor:ktor-server-cio-jvm` from 3.5.0 to 3.5.1 - [Release notes](https://github.com/ktorio/ktor/releases) - [Changelog](https://github.com/ktorio/ktor/blob/main/CHANGELOG.md) - [Commits](ktorio/ktor@3.5.0...3.5.1) Updates `io.ktor:ktor-server-netty-jvm` from 3.5.0 to 3.5.1 - [Release notes](https://github.com/ktorio/ktor/releases) - [Changelog](https://github.com/ktorio/ktor/blob/main/CHANGELOG.md) - [Commits](ktorio/ktor@3.5.0...3.5.1) Updates `io.ktor:ktor-server-cio-jvm` from 3.5.0 to 3.5.1 - [Release notes](https://github.com/ktorio/ktor/releases) - [Changelog](https://github.com/ktorio/ktor/blob/main/CHANGELOG.md) - [Commits](ktorio/ktor@3.5.0...3.5.1) Updates `com.google.dagger.hilt.android` from 2.59.2 to 2.60 - [Release notes](https://github.com/google/dagger/releases) - [Changelog](https://github.com/google/dagger/blob/master/CHANGELOG.md) - [Commits](google/dagger@dagger-2.59.2...dagger-2.60) --- updated-dependencies: - dependency-name: gradle-wrapper dependency-version: 9.6.1 dependency-type: direct:production update-type: version-update:semver-patch dependency-group: gradle-dependencies - dependency-name: com.google.dagger:hilt-android dependency-version: '2.60' dependency-type: direct:production update-type: version-update:semver-minor dependency-group: gradle-dependencies - dependency-name: com.google.dagger:hilt-android-compiler dependency-version: '2.60' dependency-type: direct:production update-type: version-update:semver-minor dependency-group: gradle-dependencies - dependency-name: com.google.dagger:hilt-android-compiler dependency-version: '2.60' dependency-type: direct:production update-type: version-update:semver-minor dependency-group: gradle-dependencies - dependency-name: io.ktor:ktor-server-core-jvm dependency-version: 3.5.1 dependency-type: direct:production update-type: version-update:semver-patch dependency-group: gradle-dependencies - dependency-name: io.ktor:ktor-server-netty-jvm dependency-version: 3.5.1 dependency-type: direct:production update-type: version-update:semver-patch dependency-group: gradle-dependencies - dependency-name: io.ktor:ktor-server-cio-jvm dependency-version: 3.5.1 dependency-type: direct:production update-type: version-update:semver-patch dependency-group: gradle-dependencies - dependency-name: io.ktor:ktor-server-netty-jvm dependency-version: 3.5.1 dependency-type: direct:production update-type: version-update:semver-patch dependency-group: gradle-dependencies - dependency-name: io.ktor:ktor-server-cio-jvm dependency-version: 3.5.1 dependency-type: direct:production update-type: version-update:semver-patch dependency-group: gradle-dependencies - dependency-name: com.google.dagger.hilt.android dependency-version: '2.60' dependency-type: direct:production update-type: version-update:semver-minor dependency-group: gradle-dependencies ... Signed-off-by: dependabot[bot] <support@github.com>
…path - Merge migrateTabOrder, ensureLibrarySortDefaults, and legacy favorite migration into a single deferred coroutine (2s delay) - Defer loadPersistedDailyMix and loadSearchHistory to after first frame (1.5s delay) - This prevents DataStore first() calls and DB queries from blocking the critical init path that feeds first-frame rendering
…storage - Load songs first (most critical tab, needed for Songs tab rendering) - Chain albums after songs, artists after albums, folders after artists using Job.join() to prevent 4 simultaneous Room queries from competing for limited I/O bandwidth on eMMC storage (Redmi) - Reduces GC pressure from concurrent heap allocations
…om queries - Replace songCountFlow (Room query) with allSongsFlow (in-memory) - Now all 3 flows in the combine are in-memory StateFlows, not Room queries - Eliminates redundant SELECT COUNT(*) query that re-emitted on every songs table write during sync
- Remove individual _isLoadingCategories toggles from albums and artists jobs (they no longer manage their own loading state) - Add a single watcher coroutine that sets _isLoadingCategories = true when songs complete, then false when all sequential jobs finish - Prevents 3 redundant recompositions of LibraryScreen through playerUiState during initial data load
- Library folders/loading combine: skip update when Triple unchanged - Sort options combine: skip update when SortOptionsSnapshot unchanged - AiUiSnapshot combine: skip update when snapshot unchanged - Prevents cascading recompositions of LibraryScreen from redundant playerUiState emissions during multiple rapid state changes
…quests - Add LYRICS to AiSystemPromptType enum - Add LYRICS case to AiSystemPromptEngine.buildPrompt with role/strategy - Update translateLyrics in AiStateHolder to use AiSystemPromptType.LYRICS - Add 'Lyrics' display label to formatPromptType in AiUsageComponents - Lyrics translation requests now appear distinctly in AI activity logs
… Parameters tab - Add GENERATION_PARAMETERS category to SettingsCategory enum with Tune icon - AI Integration tab now keeps only: provider selection, API key entry, model selection, base URL, and activity logs - New Generation Parameters tab gets: system prompt editor, temperature, top P, top K, max tokens, presence/frequency penalty, sample size, digest mode, and extended song fields - Add English string resources for the new category
…earch - Add description field to AiProvider enum entries - Create SearchableProviderSelector composable similar to SearchableModelSelector with search, filtering, and count label - Replace ThemeSelectorItem in AI_INTEGRATION settings with SearchableProviderSelector for provider selection - Search covers name, displayName, and description fields
- Update AI subtitle to reflect model selection and activity logs - Add GENERATION_PARAMETERS category strings to all locales - All new strings use English as fallback pending translator contributions
… method - Remove dead hasGeminiApiKey StateFlow in PlayerViewModel - Remove dead songCountFlow StateFlow in PlayerViewModel - Remove unused getSongCountFlow() from MusicRepository interface and impl - Remove corresponding mock from PlayerViewModelTest
|
PR Updated, check main description message. (Will be working to close issues i have opened on my fork to cover additional items, you may check as required.) |
|
Yes everything looks fine. I'll do some testing after I have time . |
…og stuck, non-Latin search - Increase lyrics translation token cap from 16384 to 32768 - Use 3x output estimation (original+translation per line) - Expand CJK detection to include Thai, Arabic, Greek, Hebrew, Hindi, Punjabi - Remove false 'already translated' guard that checked stale UI state - Reorder lyrics source priority: local file > embedded > DB > song.lyrics - Close lyrics search dialog on Success (sync searchUiState with dialog visibility) - Add romanized artist search strategies for non-Latin scripts - Improve translation prompt to handle both synced and plain (unsynced) lyrics - Fix fetchFromRemote missing return@withContext for exact-match - Fix bulk LRC scanner to use Unicode-aware regex - Fix thinking model detection false positives - Add AI response cache cleanup (7-day TTL) - Consolidate duplicate model filtering (UnifiedModelFilter) - Move Gemini API key from URL query param to HTTP header - Remove dead code (countTokens, duplicate clearAll, FQN imports)
…duplication #58: Shared OkHttpClient singleton for AI clients - Added @AiOkHttpClient qualifier in Qualifiers.kt - Provided shared OkHttpClient in AppModule.kt with 30s/60s/30s timeouts - Injected into AiClientFactory and passed to GeminiAiClient/GenericOpenAiClient - Removed per-client OkHttpClient creation from GeminiAiClient and GenericOpenAiClient - Connection pool is now reused across all AI client instances #64: Fix high-res FLAC metadata write skipping - Changed updateFileMetadataWithTagLib to return false for problematic FLAC instead of true (was silently succeeding without writing) - Added FLAC verification after JAudioTagger commit to detect failed writes - Falls back to TagLib if JAudioTagger fails on FLAC files #67: Extract hardcoded provider labels, deduplicate sections - AiClientFactory now uses provider.displayName instead of hardcoded strings - Removed 80+ lines of dead per-provider StateFlows from SettingsViewModel - Removed dead per-provider system prompt change/reset functions - Removed dead per-provider model change functions
…ode quality improvements - Fix LyricsRepositoryImpl: Song.id.toLong() → toLongOrNull() with guards for non-numeric IDs (Telegram, Netease, GDrive sources) - Fix return type mismatch in scanAndAssignLocalLrcFiles - Remove dead favorites operations from MusicDao and UserPreferencesRepository (favorites now managed via FavoritesDao with SQL triggers) - Extract duplicated AiUsageReportSection composable in SettingsCategoryScreen - Hoist 9 inline collectAsStateWithLifecycle calls in Generation Parameters - SearchScreen: derive selectedSongIds/selectedPlaylistIds from remembered sets instead of separate Flow collections; pass isShuffleEnabled as param - SongEntity: toLongOrNull() with explicit exception for invalid IDs - SongRemovalStateHolder: guard non-numeric Song.id on delete
Bumps the github-actions group with 1 update: [actions/checkout](https://github.com/actions/checkout). Updates `actions/checkout` from 6 to 7 - [Release notes](https://github.com/actions/checkout/releases) - [Changelog](https://github.com/actions/checkout/blob/main/CHANGELOG.md) - [Commits](actions/checkout@v6...v7) --- updated-dependencies: - dependency-name: actions/checkout dependency-version: '7' dependency-type: direct:production update-type: version-update:semver-major dependency-group: github-actions ... Signed-off-by: dependabot[bot] <support@github.com>
…th 3 updates Bumps the gradle-dependencies group with 3 updates in the / directory: [com.google.dagger:hilt-android](https://github.com/google/dagger), [com.google.dagger:hilt-android-compiler](https://github.com/google/dagger) and [com.google.dagger.hilt.android](https://github.com/google/dagger). Updates `com.google.dagger:hilt-android` from 2.60 to 2.60.1 - [Release notes](https://github.com/google/dagger/releases) - [Changelog](https://github.com/google/dagger/blob/master/CHANGELOG.md) - [Commits](google/dagger@dagger-2.60...dagger-2.60.1) Updates `com.google.dagger:hilt-android-compiler` from 2.60 to 2.60.1 - [Release notes](https://github.com/google/dagger/releases) - [Changelog](https://github.com/google/dagger/blob/master/CHANGELOG.md) - [Commits](google/dagger@dagger-2.60...dagger-2.60.1) Updates `com.google.dagger:hilt-android-compiler` from 2.60 to 2.60.1 - [Release notes](https://github.com/google/dagger/releases) - [Changelog](https://github.com/google/dagger/blob/master/CHANGELOG.md) - [Commits](google/dagger@dagger-2.60...dagger-2.60.1) Updates `com.google.dagger.hilt.android` from 2.60 to 2.60.1 - [Release notes](https://github.com/google/dagger/releases) - [Changelog](https://github.com/google/dagger/blob/master/CHANGELOG.md) - [Commits](google/dagger@dagger-2.60...dagger-2.60.1) --- updated-dependencies: - dependency-name: com.google.dagger.hilt.android dependency-version: 2.60.1 dependency-type: direct:production update-type: version-update:semver-patch dependency-group: gradle-dependencies - dependency-name: com.google.dagger:hilt-android dependency-version: 2.60.1 dependency-type: direct:production update-type: version-update:semver-patch dependency-group: gradle-dependencies - dependency-name: com.google.dagger:hilt-android-compiler dependency-version: 2.60.1 dependency-type: direct:production update-type: version-update:semver-patch dependency-group: gradle-dependencies - dependency-name: com.google.dagger:hilt-android-compiler dependency-version: 2.60.1 dependency-type: direct:production update-type: version-update:semver-patch dependency-group: gradle-dependencies ... Signed-off-by: dependabot[bot] <support@github.com>
|
Sorry, forgot to respond. I made many adjustments and changes since then so if you've not yet, you should try checking that out. |
…dependencies-3086ed5dc2 chore(deps): bump the gradle-dependencies group across 1 directory with 3 updates
…/github-actions-640176b5ab chore(deps): bump actions/checkout from 6 to 7 in the github-actions group
…th 17 updates Bumps the gradle-dependencies group with 17 updates in the / directory: | Package | From | To | | --- | --- | --- | | [org.jetbrains.kotlin:kotlin-metadata-jvm](https://github.com/JetBrains/kotlin) | `2.4.0` | `2.4.10` | | [org.junit.platform:junit-platform-launcher](https://github.com/junit-team/junit-framework) | `6.1.1` | `6.1.2` | | [org.junit.jupiter:junit-jupiter-api](https://github.com/junit-team/junit-framework) | `6.1.1` | `6.1.2` | | [org.junit.jupiter:junit-jupiter-engine](https://github.com/junit-team/junit-framework) | `6.1.1` | `6.1.2` | | [org.junit.vintage:junit-vintage-engine](https://github.com/junit-team/junit-framework) | `6.1.1` | `6.1.2` | | [com.google.genai:google-genai](https://github.com/googleapis/java-genai) | `1.60.0` | `1.61.0` | | [org.junit.jupiter:junit-jupiter-params](https://github.com/junit-team/junit-framework) | `6.1.1` | `6.1.2` | | [org.jetbrains.kotlin:kotlin-test-junit](https://github.com/JetBrains/kotlin) | `2.4.0` | `2.4.10` | | [org.jetbrains.kotlin.android](https://github.com/JetBrains/kotlin) | `2.4.0` | `2.4.10` | | [org.jetbrains.kotlin.plugin.compose](https://github.com/JetBrains/kotlin) | `2.4.0` | `2.4.10` | | [org.jetbrains.kotlin.plugin.serialization](https://github.com/JetBrains/kotlin) | `2.4.0` | `2.4.10` | | [org.bouncycastle:bcprov-jdk18on](https://github.com/bcgit/bc-java) | `1.84` | `1.85` | | [org.bouncycastle:bcpkix-jdk18on](https://github.com/bcgit/bc-java) | `1.84` | `1.85` | | com.android.application | `9.2.1` | `9.3.0` | | com.android.test | `9.2.1` | `9.3.0` | | com.android.library | `9.2.1` | `9.3.0` | | [com.google.devtools.ksp](https://github.com/google/ksp) | `2.3.9` | `2.3.10` | Updates `org.jetbrains.kotlin:kotlin-metadata-jvm` from 2.4.0 to 2.4.10 - [Release notes](https://github.com/JetBrains/kotlin/releases) - [Changelog](https://github.com/JetBrains/kotlin/blob/master/ChangeLog.md) - [Commits](JetBrains/kotlin@v2.4.0...v2.4.10) Updates `org.junit.platform:junit-platform-launcher` from 6.1.1 to 6.1.2 - [Release notes](https://github.com/junit-team/junit-framework/releases) - [Commits](junit-team/junit-framework@r6.1.1...r6.1.2) Updates `org.junit.jupiter:junit-jupiter-api` from 6.1.1 to 6.1.2 - [Release notes](https://github.com/junit-team/junit-framework/releases) - [Commits](junit-team/junit-framework@r6.1.1...r6.1.2) Updates `org.junit.jupiter:junit-jupiter-engine` from 6.1.1 to 6.1.2 - [Release notes](https://github.com/junit-team/junit-framework/releases) - [Commits](junit-team/junit-framework@r6.1.1...r6.1.2) Updates `org.junit.vintage:junit-vintage-engine` from 6.1.1 to 6.1.2 - [Release notes](https://github.com/junit-team/junit-framework/releases) - [Commits](junit-team/junit-framework@r6.1.1...r6.1.2) Updates `com.google.genai:google-genai` from 1.60.0 to 1.61.0 - [Release notes](https://github.com/googleapis/java-genai/releases) - [Changelog](https://github.com/googleapis/java-genai/blob/main/CHANGELOG.md) - [Commits](googleapis/java-genai@v1.60.0...v1.61.0) Updates `org.junit.jupiter:junit-jupiter-params` from 6.1.1 to 6.1.2 - [Release notes](https://github.com/junit-team/junit-framework/releases) - [Commits](junit-team/junit-framework@r6.1.1...r6.1.2) Updates `org.jetbrains.kotlin:kotlin-test-junit` from 2.4.0 to 2.4.10 - [Release notes](https://github.com/JetBrains/kotlin/releases) - [Changelog](https://github.com/JetBrains/kotlin/blob/master/ChangeLog.md) - [Commits](JetBrains/kotlin@v2.4.0...v2.4.10) Updates `org.jetbrains.kotlin.android` from 2.4.0 to 2.4.10 - [Release notes](https://github.com/JetBrains/kotlin/releases) - [Changelog](https://github.com/JetBrains/kotlin/blob/master/ChangeLog.md) - [Commits](JetBrains/kotlin@v2.4.0...v2.4.10) Updates `org.jetbrains.kotlin.plugin.compose` from 2.4.0 to 2.4.10 - [Release notes](https://github.com/JetBrains/kotlin/releases) - [Changelog](https://github.com/JetBrains/kotlin/blob/master/ChangeLog.md) - [Commits](JetBrains/kotlin@v2.4.0...v2.4.10) Updates `org.jetbrains.kotlin.plugin.serialization` from 2.4.0 to 2.4.10 - [Release notes](https://github.com/JetBrains/kotlin/releases) - [Changelog](https://github.com/JetBrains/kotlin/blob/master/ChangeLog.md) - [Commits](JetBrains/kotlin@v2.4.0...v2.4.10) Updates `org.junit.jupiter:junit-jupiter-api` from 6.1.1 to 6.1.2 - [Release notes](https://github.com/junit-team/junit-framework/releases) - [Commits](junit-team/junit-framework@r6.1.1...r6.1.2) Updates `org.junit.jupiter:junit-jupiter-engine` from 6.1.1 to 6.1.2 - [Release notes](https://github.com/junit-team/junit-framework/releases) - [Commits](junit-team/junit-framework@r6.1.1...r6.1.2) Updates `org.junit.vintage:junit-vintage-engine` from 6.1.1 to 6.1.2 - [Release notes](https://github.com/junit-team/junit-framework/releases) - [Commits](junit-team/junit-framework@r6.1.1...r6.1.2) Updates `org.bouncycastle:bcprov-jdk18on` from 1.84 to 1.85 - [Changelog](https://github.com/bcgit/bc-java/blob/main/docs/releasenotes.html) - [Commits](https://github.com/bcgit/bc-java/commits) Updates `org.bouncycastle:bcpkix-jdk18on` from 1.84 to 1.85 - [Changelog](https://github.com/bcgit/bc-java/blob/main/docs/releasenotes.html) - [Commits](https://github.com/bcgit/bc-java/commits) Updates `org.bouncycastle:bcpkix-jdk18on` from 1.84 to 1.85 - [Changelog](https://github.com/bcgit/bc-java/blob/main/docs/releasenotes.html) - [Commits](https://github.com/bcgit/bc-java/commits) Updates `com.android.application` from 9.2.1 to 9.3.0 Updates `com.android.test` from 9.2.1 to 9.3.0 Updates `com.android.library` from 9.2.1 to 9.3.0 Updates `org.jetbrains.kotlin.android` from 2.4.0 to 2.4.10 - [Release notes](https://github.com/JetBrains/kotlin/releases) - [Changelog](https://github.com/JetBrains/kotlin/blob/master/ChangeLog.md) - [Commits](JetBrains/kotlin@v2.4.0...v2.4.10) Updates `org.jetbrains.kotlin.plugin.compose` from 2.4.0 to 2.4.10 - [Release notes](https://github.com/JetBrains/kotlin/releases) - [Changelog](https://github.com/JetBrains/kotlin/blob/master/ChangeLog.md) - [Commits](JetBrains/kotlin@v2.4.0...v2.4.10) Updates `com.google.devtools.ksp` from 2.3.9 to 2.3.10 - [Release notes](https://github.com/google/ksp/releases) - [Commits](google/ksp@2.3.9...2.3.10) Updates `com.android.test` from 9.2.1 to 9.3.0 Updates `com.android.library` from 9.2.1 to 9.3.0 Updates `org.jetbrains.kotlin.plugin.serialization` from 2.4.0 to 2.4.10 - [Release notes](https://github.com/JetBrains/kotlin/releases) - [Changelog](https://github.com/JetBrains/kotlin/blob/master/ChangeLog.md) - [Commits](JetBrains/kotlin@v2.4.0...v2.4.10) --- updated-dependencies: - dependency-name: org.jetbrains.kotlin:kotlin-metadata-jvm dependency-version: 2.4.10 dependency-type: direct:production update-type: version-update:semver-patch dependency-group: gradle-dependencies - dependency-name: org.junit.platform:junit-platform-launcher dependency-version: 6.1.2 dependency-type: direct:production update-type: version-update:semver-patch dependency-group: gradle-dependencies - dependency-name: org.junit.jupiter:junit-jupiter-api dependency-version: 6.1.2 dependency-type: direct:production update-type: version-update:semver-patch dependency-group: gradle-dependencies - dependency-name: org.junit.jupiter:junit-jupiter-engine dependency-version: 6.1.2 dependency-type: direct:production update-type: version-update:semver-patch dependency-group: gradle-dependencies - dependency-name: org.junit.vintage:junit-vintage-engine dependency-version: 6.1.2 dependency-type: direct:production update-type: version-update:semver-patch dependency-group: gradle-dependencies - dependency-name: com.google.genai:google-genai dependency-version: 1.61.0 dependency-type: direct:production update-type: version-update:semver-minor dependency-group: gradle-dependencies - dependency-name: org.junit.jupiter:junit-jupiter-params dependency-version: 6.1.2 dependency-type: direct:production update-type: version-update:semver-patch dependency-group: gradle-dependencies - dependency-name: org.jetbrains.kotlin:kotlin-test-junit dependency-version: 2.4.10 dependency-type: direct:production update-type: version-update:semver-patch dependency-group: gradle-dependencies - dependency-name: org.jetbrains.kotlin.android dependency-version: 2.4.10 dependency-type: direct:production update-type: version-update:semver-patch dependency-group: gradle-dependencies - dependency-name: org.jetbrains.kotlin.plugin.compose dependency-version: 2.4.10 dependency-type: direct:production update-type: version-update:semver-patch dependency-group: gradle-dependencies - dependency-name: org.jetbrains.kotlin.plugin.serialization dependency-version: 2.4.10 dependency-type: direct:production update-type: version-update:semver-patch dependency-group: gradle-dependencies - dependency-name: org.junit.jupiter:junit-jupiter-api dependency-version: 6.1.2 dependency-type: direct:production update-type: version-update:semver-patch dependency-group: gradle-dependencies - dependency-name: org.junit.jupiter:junit-jupiter-engine dependency-version: 6.1.2 dependency-type: direct:production update-type: version-update:semver-patch dependency-group: gradle-dependencies - dependency-name: org.junit.vintage:junit-vintage-engine dependency-version: 6.1.2 dependency-type: direct:production update-type: version-update:semver-patch dependency-group: gradle-dependencies - dependency-name: org.bouncycastle:bcprov-jdk18on dependency-version: '1.85' dependency-type: direct:production update-type: version-update:semver-minor dependency-group: gradle-dependencies - dependency-name: org.bouncycastle:bcpkix-jdk18on dependency-version: '1.85' dependency-type: direct:production update-type: version-update:semver-minor dependency-group: gradle-dependencies - dependency-name: org.bouncycastle:bcpkix-jdk18on dependency-version: '1.85' dependency-type: direct:production update-type: version-update:semver-minor dependency-group: gradle-dependencies - dependency-name: com.android.application dependency-version: 9.3.0 dependency-type: direct:production update-type: version-update:semver-minor dependency-group: gradle-dependencies - dependency-name: com.android.test dependency-version: 9.3.0 dependency-type: direct:production update-type: version-update:semver-minor dependency-group: gradle-dependencies - dependency-name: com.android.library dependency-version: 9.3.0 dependency-type: direct:production update-type: version-update:semver-minor dependency-group: gradle-dependencies - dependency-name: org.jetbrains.kotlin.android dependency-version: 2.4.10 dependency-type: direct:production update-type: version-update:semver-patch dependency-group: gradle-dependencies - dependency-name: org.jetbrains.kotlin.plugin.compose dependency-version: 2.4.10 dependency-type: direct:production update-type: version-update:semver-patch dependency-group: gradle-dependencies - dependency-name: com.google.devtools.ksp dependency-version: 2.3.10 dependency-type: direct:production update-type: version-update:semver-patch dependency-group: gradle-dependencies - dependency-name: com.android.test dependency-version: 9.3.0 dependency-type: direct:production update-type: version-update:semver-minor dependency-group: gradle-dependencies - dependency-name: com.android.library dependency-version: 9.3.0 dependency-type: direct:production update-type: version-update:semver-minor dependency-group: gradle-dependencies - dependency-name: org.jetbrains.kotlin.plugin.serialization dependency-version: 2.4.10 dependency-type: direct:production update-type: version-update:semver-patch dependency-group: gradle-dependencies ... Signed-off-by: dependabot[bot] <support@github.com>
…60974e Signed-off-by: Dае Еuнша <daedaevibin@ik.me>
…dependencies-5a7a60974e chore(deps): bump the gradle-dependencies group across 1 directory with 17 updates
Bumps the gradle-dependencies group with 1 update in the / directory: androidx.compose.material3:material3. Updates `androidx.compose.material3:material3` from 1.5.0-alpha23 to 1.5.0-alpha24 --- updated-dependencies: - dependency-name: androidx.compose.material3:material3 dependency-version: 1.5.0-alpha24 dependency-type: direct:production update-type: version-update:semver-patch dependency-group: gradle-dependencies ... Signed-off-by: dependabot[bot] <support@github.com>
…dependencies-ae5cc6b71d chore(deps): bump androidx.compose.material3:material3 from 1.5.0-alpha23 to 1.5.0-alpha24 in the gradle-dependencies group across 1 directory
Bumps the gradle-dependencies group with 4 updates: [com.mikepenz:aboutlibraries-core](https://github.com/mikepenz/AboutLibraries), [com.mikepenz:aboutlibraries-compose-m3](https://github.com/mikepenz/AboutLibraries), com.mikepenz.aboutlibraries.plugin.android and [com.google.genai:google-genai](https://github.com/googleapis/java-genai). Updates `com.mikepenz:aboutlibraries-core` from 15.0.3 to 15.0.4 - [Release notes](https://github.com/mikepenz/AboutLibraries/releases) - [Commits](mikepenz/AboutLibraries@15.0.3...15.0.4) Updates `com.mikepenz:aboutlibraries-compose-m3` from 15.0.3 to 15.0.4 - [Release notes](https://github.com/mikepenz/AboutLibraries/releases) - [Commits](mikepenz/AboutLibraries@15.0.3...15.0.4) Updates `com.mikepenz.aboutlibraries.plugin.android` from 15.0.3 to 15.0.4 Updates `com.mikepenz:aboutlibraries-compose-m3` from 15.0.3 to 15.0.4 - [Release notes](https://github.com/mikepenz/AboutLibraries/releases) - [Commits](mikepenz/AboutLibraries@15.0.3...15.0.4) Updates `com.google.genai:google-genai` from 1.61.0 to 1.62.0 - [Release notes](https://github.com/googleapis/java-genai/releases) - [Changelog](https://github.com/googleapis/java-genai/blob/main/CHANGELOG.md) - [Commits](googleapis/java-genai@v1.61.0...v1.62.0) Updates `com.mikepenz.aboutlibraries.plugin.android` from 15.0.3 to 15.0.4 --- updated-dependencies: - dependency-name: com.mikepenz:aboutlibraries-core dependency-version: 15.0.4 dependency-type: direct:production update-type: version-update:semver-patch dependency-group: gradle-dependencies - dependency-name: com.mikepenz:aboutlibraries-compose-m3 dependency-version: 15.0.4 dependency-type: direct:production update-type: version-update:semver-patch dependency-group: gradle-dependencies - dependency-name: com.mikepenz.aboutlibraries.plugin.android dependency-version: 15.0.4 dependency-type: direct:production update-type: version-update:semver-patch dependency-group: gradle-dependencies - dependency-name: com.mikepenz:aboutlibraries-compose-m3 dependency-version: 15.0.4 dependency-type: direct:production update-type: version-update:semver-patch dependency-group: gradle-dependencies - dependency-name: com.google.genai:google-genai dependency-version: 1.62.0 dependency-type: direct:production update-type: version-update:semver-minor dependency-group: gradle-dependencies - dependency-name: com.mikepenz.aboutlibraries.plugin.android dependency-version: 15.0.4 dependency-type: direct:production update-type: version-update:semver-patch dependency-group: gradle-dependencies ... Signed-off-by: dependabot[bot] <support@github.com>
…dependencies-591b51ae27 bump the gradle-dependencies group with 4 updates
🎵 PixelPlayer — i18n · Romanization · AI Overhaul · Performance · Lint Fixes
65 commits · 110 files changed · +8,663 / −852 lines
2026-06-24→2026-07-17🌍 i18n • 🔤 Romanization • 🤖 AI • 🚀 Perf • 🐛 Fixes • ⚙️ CI
📊 Impact Summary
PlayerUiStateServerUrlUtils(SSRF prevention), shared OkHttpClient, lint baseline🌍 Internationalization
30 new resource files · +7,569 lines across 3 languages
🆕 New Languages
javalues-ja/vivalues-vi/zh-rTWvalues-zh-rTW/📁 Complete String File Set (per language)
strings.xmlstrings_settings.xmlstrings_player.xmlstrings_library.xmlstrings_home_screen.xmlstrings_screens.xmlstrings_cloud_services.xmlstrings_equalizer.xmlstrings_widget.xmlstrings_changelogs.xml🌐 Locale Registration
🔤 Plural Support
Addedapp/src/main/res/values/plurals.xml(59 lines) with proper quantity rules for all supported languages, fixing 14MissingDefaultResourcelint errors.🔤 Romanization Engine
MultiLangRomanizer— 10+ scripts, language detection, phonetic mappingDetection & Mapping
ПриветPrivetสวัสดีSawatdiمرحباMarhabaΓειά σουGeiá souשלוםShalomXin chàoXin chao日本語नमस्तेNamasteIntegration Points
charsPerTokendynamically (1 for CJK, 4 for Latin)🤖 AI Provider System Overhaul
~13 commits · ~18 files · +420 / −280 lines
📋 Provider Expansion
gpt-4oapi.openai.com/v1gemini-2.5-flashdeepseek-chatapi.deepseek.com/v1llama-3.3-70b-versatileapi.groq.com/openai/v1mistral-large-2411api.mistral.ai/v1nvidia/llama-3.1-nemotron-70b-instructintegrate.api.nvidia.com/v1moonshot-v1-autoapi.moonshot.cn/v1glm-4-plusopen.bigmodel.cn/api/paas/v4gemini-2.5-flash-preview-04-17:freeopenrouter.ai/api/v1llama3api.ollama.ai/v1🏗️ Architecture Consolidation
🖥️ AI Settings UI Refactor
• API key field
• Model picker
• (everything mixed together)
• Searchable provider selector 🆕
• API key, model, base URL
• Activity log
Tab 2: Generation Parameters 🆕
• System prompt
• Temperature · Top-P · Top-K
• Max tokens
• Presence/frequency penalty
• Sample size · Digest mode
• Extended fields
🔍 SearchableProviderSelector
name,displayName, anddescriptionThemeSelectorItemfor provider selection🛡️ AI Response & Stability Fixes
Response Cleaning
Dynamic Token Scaling
Live Status Feedback
AI generation dialog now shows real-time progress cards:
Toast Buffer
Provider Cooldown
mutableMapOfConcurrentHashMap🔧 Configuration Fixes
CUSTOM)hasActiveAiProviderApiKeyexplicitly handles all 11 providers🚀 Performance Optimizations
7 commits by VoidX3D · 6 files · +98 / −78 lines · ~4× faster library init
📚 Library Loading Overhaul
migrateTabOrder,ensureLibrarySortDefaults, migration,loadPersistedDailyMix,loadSearchHistoryall blocking first framesongs → albums → artists → folderswithJob.join()SELECT COUNT(*)on every sync write (~15-50ms)allSongsFlow.size(instant)distinctUntilChanged🔍 Search Tab Performance
PlayerUiStatesearchResults,selectedSearchFilter,searchHistorydirectly — no recomposition on playback tickSELECT DISTINCT genreonly fires when genre section is about to be shownperformSearch("")on navigation — avoids 300ms debounce setup🐛 Bug Fixes
~15 commits · ~25 files · +180 / −100 lines
🔧 Compilation & Build
@OptIn(ExperimentalMaterial3Api)release build failure (4e828c30)aboutlibrariesdependency (d56e11ce)@OptInonSearchableProviderSelector(61702e2e)kotlinx.coroutines.flow.firstimport (c0d06147)TimeUnitimport (2f1df763)86422df7)error_prone_annotationsdependency📝 Lyrics Translation Fixes
523c8f9bf7745255f7745255523c8f9b523c8f9b523c8f9b🤖 AI System Fixes
whenbranchesLYRICSandGENERATION_PARAMETERScases273f6d95@AiOkHttpClientqualifieracd1ce76updateFileMetadataWithTagLibreturnsfalsefor problematic FLAC; adds verificationacd1ce76provider.displayName; removed 80+ lines of per-provider StateFlowsacd1ce76UnifiedModelFilterb516f839fetchFromRemotereturnreturn@withContext4658ca3eNonObservableLocalelint1a0361dd🧹 Lint & Code Quality
MissingDefaultResourcevalues/plurals.xmlNewApi@RequiresApi(31)annotationsWrongConstantNonObservableLocaleMissingIntentFilterForMediaSearchAndroidManifest.xml🗑️ Dead Code Removal
⚙️ CI & Build
CI workflows, version bumps, Gradle config, opencode tooling
Workflow Updates
--no-build-cacheto all Gradle build stepsmaxHeapSizefromapp/build.gradle.ktsc2972561)Dependency Updates
10 dependabot batches covering:
androidx.compose.material3: 1.5.0-alpha23 → 1.5.0-alpha24actions/checkout: v6 → v7🔒 Security & Utility
New utilities for server security and platform compatibility
ServerUrlUtils
PlatformUtils
Lint Baseline
📁 Complete File Manifest
110 files changed · +8,663 / −852 lines
➕ New Files (+7,569 lines)
Localization — 30 files:
Utilities & Tooling — 4 files:
🗑️ Removed — 1 file
✏️ Modified — ~45 Kotlin files
🤖 AI Layer (11 files):
AiHandler.kt·AiResponseCleaner.kt·AiSystemPromptEngine.kt·GeminiModelService.kt·AiProvider.kt·AiClientFactory.kt·GeminiAiClient.kt·GenericOpenAiClient.kt·AiClient.kt·AiPreferencesRepository.kt·AiUsageDao.kt⚙️ Settings UI (4 files):
SettingsCategoryScreen.kt(major tab refactor ±355) ·SettingsComponents.kt🆕 (+180) ·SettingsScreen.kt·SettingsViewModel.kt(−199 lines streamlined)🧠 State Management (4 files):
AiStateHolder.kt·LibraryStateHolder.kt·LyricsStateHolder.kt·PlayerViewModel.kt💾 Repository & Data (6 files):
LyricsRepositoryImpl.kt(+127) ·MusicRepository.kt·MusicRepositoryImpl.kt·MusicDao.kt·SongEntity.kt·SongMetadataEditor.kt🔌 DI (2 files):
AppModule.kt·Qualifiers.kt🖥️ UI (5 files):
SearchScreen.kt·LibraryScreen.kt·LyricsSheet.kt·PlaylistCreationDialogs.kt·FullPlayerContent.kt📱 Platform (3 files):
MainActivity.kt·ExternalPlayerActivity.kt·PlayerControlActionCallback.kt🔧 Other (10 files):
AiUsageBackupHandler.kt·MediaStorePagingSource.kt·AppLanguage.kt·UserPreferencesRepository.kt·SettingsCategory.kt·SongRemovalStateHolder.kt·AiUsageComponents.kt·LyricsUtils.kt·LibraryActionRow.kt·PlayerViewModelTest.kt📦 Build & Config — 10 files
📜 Complete Commit History
65 commits · 3 contributors · 2026-06-24 → 2026-07-17
🗓️ 2026-06-24 — Dae Euhwa: Foundation & i18n
db454bce7e927c01f53d8573d74f593c2580e86a5a900052a88c9a114940904a0f4045bd54dca07c🗓️ 2026-06-24 — Dependabot
b98c567bdce462d2🗓️ 2026-06-25 — Merge & Cleanup
b6b2096f2bfbd3b18607ca0e🗓️ 2026-06-26 — Dependabot
ea72d884🗓️ 2026-06-28 — VoidX3D: AI Overhaul & Performance
66be53ccb4689a6337ef4d2a7b9407de898f756480fb3bf6d799cd9e08e941e3b10358a85b0444cd273f6d9561702e2e51209dc38eac8164e3e1b19e86422df7c8c06dbcb516f8391d83e43fc0d06147fa9f49972b509c2f🗓️ 2026-06-29 → 2026-07-02 — Dependabot
a10cfe57a44b927ab6517b9e🗓️ 2026-07-05 → 2026-07-06 — Dae Euhwa: Integration & Fixes
6071439a523c8f9b1a0361ddf7745255acd1ce762f1df7634658ca3e🗓️ 2026-07-07 → 2026-07-08 — Dae Euhwa: Tooling & Merges
c2972561ea4249878a8b18ef82ab4445c9b99a02f73beee6🗓️ 2026-07-10 → 2026-07-17 — Dae Euhwa: Final Fixes
bc1fbf97b786378307c0bd546e38b637c6c61e7cc7f5afa3d56e11ce57434a9f6a52fc7e2b331f7b4e828c30🙏 Credits
Veridian-Zenith/PixelPlayer → PixelPlayerHQ/PixelPlayer · 65 commits · 3 contributors · +8,663 / −852 lines · 110 files
2026-06-24 → 2026-07-17